// Iterator
// 声明一个数组(Array)
const xiYou = ["唐僧", "孙悟空", "猪八戒", "沙僧", "白龙马"];

// 原始: 使用 for...in 遍历数组
for (let k in xiYou) {
  console.log(k); // 索引
}

// ES6新增: 使用 for...of 遍历数组
for (let v of xiYou) {
  console.log(v); // 数值
}

// Symbol中的iterator
let iterator = xiYou[Symbol.iterator]();

console.log(iterator.next()); // { value: '唐僧', done: false }
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());

// 最后一个数据已经被取走了
console.log(iterator.next()); // { value: undefined, done: true }

// 我的理解: iterator内的数据结构存储就像一个队列, 先进先出, 每调用一次next()
// 就从前端返回一个元素, 直至队列元素全部返回完毕, done属性状态修改为true, 意味迭代已完成